package com.roamer.audition.common.enums;

import com.roamer.audition.common.enums.base.BaseDbEnum;
import lombok.Getter;

import java.util.Optional;

/**
 * 评分枚举
 *
 * @author roamer
 * @version V1.0
 * @date 2019/9/1 9:46 下午
 */
@Getter
public enum ScoreEnum implements BaseDbEnum {
    /** 1分 */
    ONE((byte) 1, "1分"),
    /** 2分 */
    TWO((byte) 2, "2分"),
    /** 3分 */
    THREE((byte) 3, "3分"),
    /** 4分 */
    FOUR((byte) 4, "4分"),
    /** 5分 */
    FIVE((byte) 5, "5分"),
    ;

    final Byte value;

    final String desc;

    ScoreEnum(byte value, String desc) {
        this.value = value;
        this.desc = desc;
    }

    /**
     * 是否存在
     *
     * @param value 对比{@link ScoreEnum#value}
     *
     * @return {@code true} 存在返回true
     */
    public static boolean exist(Byte value) {
        if (null == value) {
            return false;
        }
        for (ScoreEnum e : ScoreEnum.values()) {
            if (e.value.equals(value)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 获取枚举实例
     *
     * @param value 对比{@link ScoreEnum#value}
     *
     * @return {@code Optional<ScoreEnum>}
     */
    public static Optional<ScoreEnum> getOptionalEnumByValue(Byte value) {
        if (null == value) {
            return Optional.empty();
        }
        for (ScoreEnum e : ScoreEnum.values()) {
            if (e.value.equals(value)) {
                return Optional.of(e);
            }
        }
        return Optional.empty();
    }

    /**
     * 获取枚举实例
     *
     * @param value 对比{@link ScoreEnum#value}
     *
     * @return {@code ScoreEnum}
     */
    public static ScoreEnum getEnumByValue(Byte value) {
        if (null == value) {
            return null;
        }
        for (ScoreEnum e : ScoreEnum.values()) {
            if (e.value.equals(value)) {
                return e;
            }
        }
        return null;
    }

    /**
     * 获取枚举描述
     *
     * @param value 对比{@link ScoreEnum#value}
     *
     * @return {@code Optional<String>}
     */
    public static Optional<String> getDescByValue(Byte value) {
        if (null == value) {
            return Optional.empty();
        }
        return getOptionalEnumByValue(value).map(ScoreEnum::getDesc);
    }
}
